home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / video / fly8111-.000 / fly8111- / fly8 / om61.c < prev    next >
C/C++ Source or Header  |  1979-12-31  |  2KB  |  101 lines

  1. /* --------------------------------- om61.c --------------------------------- */
  2.  
  3. /* This is part of the flight simulator 'fly8'.
  4.  * Author: Eyal Lebedinsky (eyal@ise.canberra.edu.au).
  5. */
  6.  
  7. /* object: M61 bullet. Also bullet related routines.
  8. */
  9.  
  10. #include "plane.h"
  11.  
  12.  
  13. extern int FAR
  14. BulletSpeed (OBJECT *p, VECT V)
  15. {
  16.     int    bspeed;
  17.  
  18.     bspeed = p->speed;            /* rel bullet speed */
  19.     if (bspeed > VMAX-BULLETV)
  20.         bspeed = VMAX - bspeed;
  21.     else
  22.         bspeed = BULLETV;
  23.     Vscale (V, p->T[Y], bspeed);        /* rel bullet vector */
  24.     Vinc (V, p->V);                /* abs bullet vector */
  25.     bspeed = ihypot3d (V);            /* abs bullet speed */
  26.     return (bspeed);
  27. }
  28.  
  29. static SHAPE shape_m61 = {
  30.     0,
  31.     0,
  32.     SH_G|SH_HIT,
  33.     100L,        /* weight */
  34.     0        /* drag */
  35. };
  36.  
  37. LOCAL_FUNC int FAR
  38. create_m61 (OBJECT *p)
  39. {
  40.     ANGLE    errmag, errdir;
  41.     int    v;
  42.  
  43.     if (!st.owner)
  44.         return (1);
  45.  
  46.     p->color = CC_WHITE;
  47.     p->time = 3*TIMEPSEC;
  48.     p->owner = st.owner;
  49.     p->ownerid = st.owner->id;
  50.     p->damage = 1;
  51.     p->damaging = 1;
  52.     p->flags |= F_DONE;
  53.     if (st.owner->flags & F_IMPORTED) {
  54.         p->flags |= F_IMPORTED;
  55.         p->rplayer = st.owner->rplayer;
  56.     }
  57.  
  58.     LVcopy (p->R, st.owner->R);
  59.     Vcopy (p->a, st.owner->a);
  60.  
  61.     errmag = Frand() % (BULLETSCATTER+1);
  62.     errmag = muldiv (errmag, errmag, BULLETSCATTER);
  63.     errdir = (Frand()%D90)*4;
  64.     p->a[X] += fmul (errmag, COS(errdir));
  65.     p->a[Z] += fmul (errmag, SIN(errdir));
  66.     Mobj (p);
  67.  
  68.     if (st.owner->speed > VMAX - BULLETV)
  69.         v = VMAX - st.owner->speed;
  70.     else
  71.         v = BULLETV;
  72.     Vscale (p->V, p->T[Y], v);
  73.     Vinc (p->V, st.owner->V);
  74.     v = Frand () % st.interval;
  75.     p->R[X] += muldiv (p->V[X], v, 1000);
  76.     p->R[Y] += muldiv (p->V[Y], v, 1000);
  77.     p->R[Z] += muldiv (p->V[Z], v, 1000);
  78.     p->speed = ihypot3d (p->V);
  79.  
  80.     if (st.quiet)
  81.         Snd->Effect (EFF_M61_SHOOT, SND_ON);
  82.  
  83.     if (st.owner == CC)
  84.         ++st.nbullets;
  85.     return (0);
  86. }
  87.  
  88. BODY FAR BoM61 = {
  89.     0,
  90.     0,
  91.     "M61",
  92.     &shape_m61,
  93.     gen_read,
  94.     gen_term,
  95.     create_m61,
  96.     gen_delete,
  97.     gen_dynamics,
  98.     gen_hit
  99. };
  100.  
  101.